package cl.tinet.trainee.tarea6b.business;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import cl.tinet.trainee.tarea6b.ejb.SalaBean;
//import cl.tinet.trainee.tarea6b.exceptions.UsuarioException;
import cl.tinet.trainee.tarea6b.model.RandomString;
import cl.tinet.trainee.tarea6b.model.Sala;

/**
 * Managed Bean que maneja la informacion que proviene desde la capa web y la
 * redirecciona a los metodos necesarios.
 * 
 * @author Jose Ignacio
 * 
 */
@ManagedBean
@ViewScoped
public class SalaManagedBean implements Serializable {

    /**
     * 
     */
    private String message;

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    /**
     * 
     */
    @EJB(mappedName = "salaBean", name = "salaBean")
    private transient SalaBean bean;
    /**
     * 
     */
    private Sala sala;
    /**
     * 
     */
    private List<Sala> salas;

    private Integer total;

    /**
     * Allows to get the total attribute value.
     * 
     * @return the total value.
     */
    public Integer getTotal() {
        return total;
    }

    /**
     * Allows to set the total attribute value.
     * 
     * @param total
     *            new value for total attribute.
     */
    public void setTotal(Integer total) {
        this.total = total;
    }

    /**
     * Instanciador de nuevo Entity Manager para cada acceso a la clase.
     */
    @PostConstruct
    public void init() {
        if (this.sala == null) {
            this.sala = new Sala();
        }
    }

    /**
     * Recibe un usuario creado desde la capa web y lo agrega a la base de
     * datos.
     * 
     * @return El valor de retorno indica la pagina a la que redirecciona el
     *         metodo, en este caso la pagina index.
     */
    public String agregarMG() {
        FacesContext context = FacesContext.getCurrentInstance();
        bean.agregarSala(sala);
        context.addMessage(null, new FacesMessage("Bien!","Sala agregada..."));
        return "index";
    }

    public String agregarMuchosMG() {

        int contador = 0;
        while (contador <= total) {

            RandomString rnd = new RandomString(10);

            String nombre = rnd.nextString();
            String ubicacion = rnd.nextString();

            sala.setNombre(nombre);
            sala.setUbicacion(ubicacion);
            sala.setProyector(true);
            sala.setTelevision(true);
            sala.setCapacidad(99);

            bean.agregarSala(sala);

            contador++;
        }
        return "listar";

    }

    /**
     * Recibe del bean un usuario y lo elimina de la base de datos.
     * 
     * @return El valor de retorno indica la pagina a la que redirecciona el
     *         metodo, en este caso la pagina borrar.
     */
    public String borrarMG() {
        bean.borrarSala(sala);
        return "borrar";
    }

    /**
     * Recibe del bean un usuario y lo actualiza de la base de datos.
     * 
     * @return El valor de retorno indica la pagina a la que redirecciona el
     *         metodo, en este caso la pagina actualizar.
     */
    public String actualizarMG() {
        bean.actualizarSala(sala);
        return "actualizar";
    }

    /**
     * Metodo que retorna la lista de todos los usuarios.
     * 
     * @return Retorna una lista con todos los usuarios que se encuentran en
     *         la base de datos.
     */
    public List<Sala> listarMG() {
        salas = bean.listarSalas();
        return salas;
    }

    /**
     * Allows to get the usuario attribute value.
     * 
     * @return the usuario value.
     */
    public Sala getSala() {
        return sala;
    }

    /**
     * Allows to set the usuario attribute value.
     * 
     * @param usuario
     *            new value for usuario attribute.
     */
    public void setSala(Sala sala) {
        this.sala = sala;
    }

    /**
     * Allows to get the usuarios attribute value.
     * 
     * @return the usuarios value.
     */
    public List<Sala> getSalas() {
        return salas;
    }

    /**
     * Allows to set the usuarios attribute value.
     * 
     * @param usuarios
     *            new value for usuarios attribute.
     */
    public void setSalas(List<Sala> salas) {
        this.salas = salas;
    }

    /**
     * 
     * Growl.
     * 
     * @param msg
     *            String.
     */
    public void saveMessage(String msg) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Exito", "Your message: "
                + msg));
    }

    /**
     * Allows to get the message attribute value.
     * 
     * @return the message value.
     */
    public String getMessage() {
        return message;
    }

    /**
     * Allows to set the message attribute value.
     * 
     * @param message
     *            new value for message attribute.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}
